﻿
CREATE PROCEDURE [dbo].[CheckDictionaryDelete]
(--Проверка возможности физического удаления записи из таблиц справочников
	@PhysicallyDelete bit OUTPUT,
	@DepartmentId int OUTPUT,
	@MW varchar(50) OUTPUT -- если = PhysicallyDelete то запись удаляется физически. В противном случае поле ToDelete устанавливается в 1
)
AS
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int
	SET NOCOUNT ON;

--В тех организациях где нет подразделений записи из справочников удаляем физически 
IF NOT EXISTS (SELECT * FROM CO.Departments WHERE Id > 1)
BEGIN
	SELECT @MW = 'PhysicallyDelete', @DepartmentId = 0, @PhysicallyDelete = 1
	RETURN 0
END

IF IsNull(@MW, '') = 'PhysicallyDelete' SET @PhysicallyDelete = 1
ELSE SET @PhysicallyDelete = 0

SET @DepartmentId = NULL
SELECT @DepartmentId = DepartmentId FROM PR.DepartmentOptions

IF ( @DepartmentId Is Null )
BEGIN
	IF @@trancount > 0 ROLLBACK TRANSACTION
	SELECT @intErrCode = 90, 
	@strMsg = 'Неизвестный идентификатор подразделения!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF @PhysicallyDelete = 0 AND @DepartmentId <> 0
BEGIN --здесь подразумевается попытка удаления записи из справочников пользвателем в подразделении
	IF @@trancount > 0 ROLLBACK TRANSACTION
	SELECT @intErrCode = 91, 
	@strMsg = 'Удалять строки из справочников можно только в центральном офисе!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

RETURN 0
